# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
@Time : 2022/7/23 0023 22:40
@Author : 测试开发工程师
@File : 9. 越权访问漏洞.py
@Software: PyCharm
============================
"""

"""
越权访问漏洞：

越权基础知识：  横向越权（同级） 和 纵向越权（管理员）
    就是超出了权限或者权力范围。多数 web 应用都具备权限划分和控制，但是如果权限控制功能设计存在缺陷，
    那么攻击者就可以通过这些缺陷来访问未经授权的功能和数据，这就是我们通常说的越权漏洞。攻击者越权后
    就可以进行一些操作，例如查看敏感信息，进行一些增删改查的操作等等。 
越权案例：
    基于用户 id 的越权 ： 在使用某个功能时通过用户提交的身份ID（用户ID，账号，手机号，证件号等用户唯一标识）来访问或者操作对应的数据
        用户a  -  拿到用户 b 的数据
    基于功能 id 的越权：在使用某个功能时通过用户提交的身份ID（用户ID，账号，手机号，证件号等用户唯一标识）来访问或者操作对应的数据
        用户a  -  拿到用户 b 的数据
    基于文件 id 的越权： 文件1 id 拿到 文件2 的数据
    基于未授权访问的越权： 目前主要存在未授权访问的漏洞有： NFS服务，Samba服务，LDAP，Rsync，FTP，GitLab，Jenkins等
    基于前端的权限验证绕过： 某站点后台仅使用js跳转来限制未授权的用户访问
    基于功能地址的越权
    基于接口身份的越权
    代码验证缺陷导致权限绕过
    Redis 未授权访问漏洞
    
防护方式：
    1. 验证需要从前端获取的参数，比如用户 id 和角色 权限名，对于需要前台请求来返回数据的参数进行权限校验
    2. 对于固定返回信息可以使用特定链接返回地址返回，在用户访问时进行权限校验
    3. 对于需要修改，新增等功能进行判断，根据当前 session 校验当前用户，参数中只传入修改的用户信息。
    4. 区分用户和管理员时，不采用某些相同的参数来区别，如 dede 区分管理和用户都是采用ID 值，容易产生问题。纵向越权
    5. 对于查询类越权需要对每一次请求的参数做当前用户身份校验，避免横向越权
    6. 采用成熟的权限管理框架，如 spring security
    7. 用户进行访问操作的凭证（如用户 ID，产品号码，订单流水等）优先采用在服务端关联session或加密后放在session中的方式获取
    8. 必须采用表单或其他参数提交用户进行访问操作的凭证（如用户ID，产品号码，订单流水）时，应尽可能采用难以猜测的构造方式（增加字母及随机数字等）
    或采用复杂的加密算法加密后提交，应对客户端提交的凭证与会话的权限进行严格的验证，如提交的产品号码是否为隶属于登陆用户的产品号码
    9. 对管理功能模块进行严格的权限验证，如非必要建议不对互联网开放或进行网络层的访问控制。
    


"""
